home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: Greatest Hits 1996 / Amiga Games: Greatest Hits 1996.iso / archive / userbox / publicdomain / engclock_v7.0.lha / EngClock_v7.0 / EngClock7_Source / getdate.c < prev    next >
C/C++ Source or Header  |  1996-01-23  |  14KB  |  496 lines

  1. /* Checked printf/Printf FREE! */
  2.  
  3. /*
  4.  *  Source machine generated by GadToolsBox V2.0
  5.  *  which is (c) Copyright 1991-1993 Jaba Development
  6.  *
  7.  *  GUI Designed by : -- Unnamed --
  8.  */
  9.  
  10. #include <exec/types.h>
  11. #include <intuition/intuition.h>
  12. #include <intuition/classes.h>
  13. #include <intuition/classusr.h>
  14. #include <intuition/imageclass.h>
  15. #include <intuition/gadgetclass.h>
  16. #include <libraries/gadtools.h>
  17. #include <graphics/displayinfo.h>
  18. #include <graphics/gfxbase.h>
  19. //#include <proto/exec.h>
  20. //#include <proto/intuition.h>
  21. //#include <proto/gadtools.h>
  22. //#include <proto/graphics.h>
  23. //#include <proto/utility.h>
  24. #include <string.h>
  25. #include <stdio.h>
  26. #include <stdlib.h>
  27. #include <exec/memory.h>
  28. #include <dos/dos.h>
  29. #include <dos/dostags.h>
  30.  
  31. #include <clib/dos_protos.h>
  32. #include <clib/exec_protos.h>
  33. #include <clib/utility_protos.h>
  34. #include <clib/intuition_protos.h>
  35. #include <clib/gadtools_protos.h>
  36. #include <clib/graphics_protos.h>
  37.  
  38. extern struct IntuitionBase *IntuitionBase;
  39. extern struct GfxBase *GfxBase;
  40. extern struct Library *UtilityBase;
  41. extern struct Library *GadToolsBase;
  42. extern struct Library *DiskfontBase;
  43. extern struct Library *AslBase;
  44. extern struct Library *IFFParseBase;
  45. extern struct Library *DOSBase;
  46.  
  47. BOOL handlenewgadgets(ULONG code, ULONG iaddress);
  48. void getdate(void);
  49. void checkcheck(void);
  50. char *dodate(void);
  51. char *findday(int preset2);
  52. void adaptlang(void);
  53.  
  54. #include "getdate.h"
  55.  
  56. #define ENGLISH 1
  57. #define FRENCH 2
  58. #define SPANISH 3
  59.  
  60. extern char *months_data[13];
  61. extern char *months_data_french[13];
  62. extern char *months_data_spanish[13];
  63. extern char *days_data[7];
  64. extern char *days_data_french[7];
  65. extern char *days_data_spanish[7];
  66.  
  67. extern int language;
  68.  
  69. char datey[200];
  70.  
  71. struct ClockData *dte, ndte;
  72.  
  73. struct Event {
  74.     BOOL used;
  75.     int type;    /* Type of event */
  76.     int hours;    /* Time of event */
  77.     int minutes;
  78.     int timecode;
  79.     char message[256];
  80.     int day;
  81.     int month;
  82.     int year;
  83.     BOOL enabledate;
  84.     int freq;
  85. };
  86.  
  87. extern struct {
  88. /* Prefs structure used for preferences file format */
  89.  
  90.    char header[10];  /* I.D. Header */
  91.    int vers;         /* Version of preferences file */
  92.    int x;            /* X dimension of window when saved */
  93.    int y;            /* Y dimension of window when saved */
  94.    int width;        /* Width of window when saved */
  95.    int height;       /* Height of window when saved */
  96.    int planguage;    /* Language selected (menu) when saved, low pri */
  97.    int just;         /* Justification of text, 0=Left, 1=Centre, 2=Right */
  98.    short date;       /* Display date?, 0 = No, 1=Yes */
  99.    short wtf;         /* Window to front ? */
  100.    int time_col[8];
  101.    int date_col[8];
  102.    short autoadjust;       /* Use automatic adjustment on window ? */
  103.    char backdrop[256];  /* Backdrop image */
  104.    char pub[139];            /* Default public screen */
  105.     char accent[256];        /* Language file for tRanslate */
  106.     char tkey[100];
  107.     char hkey[100];
  108.     struct Event events[11];  /* For the alarm! */
  109.  
  110. }prefs;
  111.  
  112.  
  113. extern struct Screen *pubscreen;
  114. APTR                   VisualInfo3 = NULL;
  115. struct Window         *Project0Wnd3 = NULL;
  116. struct Gadget         *Project0GList3 = NULL;
  117. struct Gadget         *Project0Gadgets3[10];
  118. UWORD                  Project0Left3 = 55;
  119. UWORD                  Project0Top3 = 37;
  120. UWORD                  Project0Width3 = 456;
  121. UWORD                  Project0Height3 = 111;
  122. UBYTE                 *Project0Wdt3 = (UBYTE *)"Date settings";
  123.  
  124. extern int preset;
  125.  
  126. struct TextAttr topaz83 = {
  127.     ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  128.  
  129.     
  130. UBYTE *Freq0Labels[] = {
  131.     (UBYTE *)"Daily",
  132.     (UBYTE *)"Once",
  133.     (UBYTE *)"Weekly",
  134.     (UBYTE *)"Monthly",
  135.     (UBYTE *)"Annually",
  136.     NULL };
  137.  
  138. UWORD Project0GTypes3[] = {
  139.     INTEGER_KIND,
  140.     INTEGER_KIND,
  141.     INTEGER_KIND,
  142.     SLIDER_KIND,
  143.     SLIDER_KIND,
  144.     SLIDER_KIND,
  145.     BUTTON_KIND,
  146.     CHECKBOX_KIND,
  147.     MX_KIND,
  148.     TEXT_KIND
  149. };
  150.  
  151. struct NewGadget Project0NGad3[] = {
  152.     36, 9, 67, 13, (UBYTE *)"Day", NULL, GD_Date_Value, PLACETEXT_RIGHT, NULL, NULL,
  153.     33, 31, 67, 13, (UBYTE *)"Month", NULL, GD_Month_Value, PLACETEXT_RIGHT, NULL, NULL,
  154.     33, 51, 67, 13, (UBYTE *)"Year", NULL, GD_Year_Value, PLACETEXT_RIGHT, NULL, NULL,
  155.     174, 9, 130, 13, NULL, NULL, GD_Date_Slide, 0, NULL, NULL,
  156.     174, 31, 130, 13, NULL, NULL, GD_Month_Slide, 0, NULL, NULL,
  157.     174, 51, 130, 13, NULL, NULL, GD_Year_Slide, 0, NULL, NULL,
  158.     15, 90, 426, 15, (UBYTE *)"Ok", NULL, GD_OK, PLACETEXT_IN, NULL, NULL,
  159.     413, 69, 26, 11, (UBYTE *)"Enable date", NULL, GD_Current, PLACETEXT_LEFT, NULL, NULL,
  160.     419, 7, 17, 9, NULL, NULL, GD_Freq, PLACETEXT_LEFT, NULL, NULL,
  161.     31, 70, 251, 13, NULL, NULL, GD_Date_Text, 0, NULL, NULL
  162. };
  163.  
  164. ULONG Project0GTags3[] = {
  165.     (GTIN_Number), 0, (GTIN_MaxChars), 2, (TAG_DONE),
  166.     (GTIN_Number), 0, (GTIN_MaxChars), 2, (TAG_DONE),
  167.     (GTIN_Number), 0, (GTIN_MaxChars), 4, (TAG_DONE),
  168.     (GTSL_Min), 1, (GTSL_Max), 31, (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  169.     (GTSL_Min), 1, (GTSL_Max), 12, (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  170.     (GTSL_Min), 1995, (GTSL_Max), 2010, (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  171.     (TAG_DONE),
  172.     (TAG_DONE),
  173.     (GTMX_Labels), (ULONG)&Freq0Labels[ 0 ], (GTMX_Spacing), 3, (TAG_DONE),
  174.     (GTTX_Border), TRUE, (GTTX_Justification), GTJ_CENTER, (GTTX_Clipped), TRUE, (TAG_DONE)
  175. };
  176.  
  177. int SetupScreen3( void )
  178. {
  179.  
  180.     if ( ! ( VisualInfo3 = GetVisualInfo( pubscreen, TAG_DONE )))
  181.         return( 2L );
  182.  
  183.     return( 0L );
  184. }
  185.  
  186. void CloseDownScreen3( void )
  187. {
  188.     if ( VisualInfo3 ) {
  189.         FreeVisualInfo( VisualInfo3 );
  190.         VisualInfo3 = NULL;
  191.     }
  192.  
  193. }
  194.  
  195. int OpenProject0Window3( void )
  196. {
  197.     struct NewGadget    ng;
  198.     struct Gadget    *g;
  199.     UWORD        lc, tc;
  200.     UWORD        offx = pubscreen->WBorLeft, offy = pubscreen->WBorTop + pubscreen->RastPort.TxHeight + 1;
  201.  
  202.     if ( ! ( g = CreateContext( &Project0GList3 )))
  203.         return( 1L );
  204.  
  205.     for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  206.  
  207.         CopyMem((char * )&Project0NGad3[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  208.  
  209.         ng.ng_VisualInfo = VisualInfo3;
  210.         ng.ng_TextAttr   = &topaz83;
  211.         ng.ng_LeftEdge  += offx;
  212.         ng.ng_TopEdge   += offy;
  213.  
  214.         Project0Gadgets3[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes3[ lc ], g, &ng, ( struct TagItem * )&Project0GTags3[ tc ] );
  215.  
  216.         while( Project0GTags3[ tc ] ) tc += 2;
  217.         tc++;
  218.  
  219.         if ( NOT g )
  220.             return( 2L );
  221.     }
  222.  
  223.     if ( ! ( Project0Wnd3 = OpenWindowTags( NULL,
  224.                 WA_Left,    Project0Left3,
  225.                 WA_Top,        Project0Top3,
  226.                 WA_Width,    Project0Width3,
  227.                 WA_Height,    Project0Height3 + offy,
  228.                 WA_IDCMP,    INTEGERIDCMP|SLIDERIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|MXIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  229.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  230.                 WA_Gadgets,    Project0GList3,
  231.                 WA_Title,    Project0Wdt3,
  232.                 WA_ScreenTitle,    "EngClock Prefs",
  233.                 WA_PubScreen,    pubscreen,
  234.                 TAG_DONE )))
  235.     return( 4L );
  236.  
  237.     GT_RefreshWindow( Project0Wnd3, NULL );
  238.  
  239.     return( 0L );
  240. }
  241.  
  242. void CloseProject0Window3( void )
  243. {
  244.     if ( Project0Wnd3        ) {
  245.         CloseWindow( Project0Wnd3 );
  246.         Project0Wnd3 = NULL;
  247.     }
  248.  
  249.     if ( Project0GList3      ) {
  250.         FreeGadgets( Project0GList3 );
  251.         Project0GList3 = NULL;
  252.     }
  253. }
  254.  
  255. void getdate(void) {
  256.  
  257.     ULONG class, code, iaddress;
  258.     struct IntuiMessage *msg;
  259.  
  260.     SetupScreen3();
  261.     adaptlang();
  262.     OpenProject0Window3();
  263.  
  264.     /* Default gadget settings */
  265.  
  266.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Date_Value],Project0Wnd3,NULL,GTIN_Number,prefs.events[preset].day,TAG_END);
  267.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Date_Slide],Project0Wnd3,NULL,GTSL_Level,prefs.events[preset].day,TAG_END);
  268.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Month_Value],Project0Wnd3,NULL,GTIN_Number,prefs.events[preset].month,TAG_END);
  269.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Month_Slide],Project0Wnd3,NULL,GTSL_Level,prefs.events[preset].month,TAG_END);
  270.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Year_Value],Project0Wnd3,NULL,GTIN_Number,prefs.events[preset].year,TAG_END);
  271.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Year_Slide],Project0Wnd3,NULL,GTSL_Level,prefs.events[preset].year,TAG_END);
  272.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Current],Project0Wnd3,NULL,GTCB_Checked,prefs.events[preset].enabledate,TAG_END);
  273.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Freq],Project0Wnd3,NULL,GTMX_Active,prefs.events[preset].freq,TAG_END);
  274.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Date_Text],Project0Wnd3,NULL,GTTX_Text,dodate(),TAG_END);
  275.  
  276.     GT_RefreshWindow(Project0Wnd3,NULL);
  277.  
  278.     while(1) {
  279.         Wait(1<<Project0Wnd3->UserPort->mp_SigBit);
  280.         msg=(struct IntuiMessage *)GT_GetIMsg(Project0Wnd3->UserPort);
  281.         class=msg->Class;
  282.         code=msg->Code;
  283.         iaddress=(ULONG)msg->IAddress;
  284.         GT_ReplyIMsg(msg);
  285.  
  286.         switch(class) {
  287.             case CLOSEWINDOW:
  288.                 goto cleanup;
  289.             break;
  290.             case GADGETUP:
  291.             case GADGETDOWN:
  292.             case MOUSEMOVE:
  293.                 if(handlenewgadgets(code, iaddress)) goto cleanup;
  294.             break;
  295.             default:
  296.             break;
  297.         }
  298.         
  299.     }
  300.  
  301.     cleanup:
  302.     
  303.     CloseProject0Window3();
  304.     CloseDownScreen3();
  305.  
  306. }
  307.  
  308. BOOL handlenewgadgets(ULONG code, ULONG iaddress) {
  309.     struct Gadget *gad;
  310.     struct StringInfo *si;
  311.  
  312.     gad=(struct Gadget *)iaddress;
  313.     si=(struct StringInfo *)gad->SpecialInfo;
  314.  
  315.     switch(gad->GadgetID) {
  316.         case GD_Date_Value:
  317.             if(si->LongInt < 1 || si->LongInt > 31) {
  318.                 DisplayBeep(NULL);
  319.                 GT_SetGadgetAttrs(Project0Gadgets3[GD_Date_Value],Project0Wnd3,NULL,GTIN_Number,prefs.events[preset].day,TAG_END);
  320.                 GT_RefreshWindow(Project0Wnd3,NULL);
  321.                 break;
  322.             }
  323.             prefs.events[preset].day=si->LongInt;
  324.             GT_SetGadgetAttrs(Project0Gadgets3[GD_Date_Slide],Project0Wnd3,NULL,GTSL_Level,si->LongInt,TAG_END);
  325.             GT_RefreshWindow(Project0Wnd3,NULL);
  326.             checkcheck();
  327.         break;
  328.         case GD_Month_Value:
  329.             if(si->LongInt < 1 || si->LongInt > 12) {
  330.                 DisplayBeep(NULL);
  331.                 GT_SetGadgetAttrs(Project0Gadgets3[GD_Month_Value],Project0Wnd3,NULL,GTIN_Number,prefs.events[preset].month,TAG_END);
  332.                 GT_RefreshWindow(Project0Wnd3,NULL);
  333.                 break;
  334.             }
  335.             prefs.events[preset].month=si->LongInt;
  336.             GT_SetGadgetAttrs(Project0Gadgets3[GD_Month_Slide],Project0Wnd3,NULL,GTSL_Level,si->LongInt,TAG_END);
  337.             GT_RefreshWindow(Project0Wnd3,NULL);
  338.             checkcheck();
  339.         break;
  340.         case GD_Year_Value:
  341.             if(si->LongInt < 1995 || si->LongInt > 2010) {
  342.                 DisplayBeep(NULL);
  343.                 GT_SetGadgetAttrs(Project0Gadgets3[GD_Year_Value],Project0Wnd3,NULL,GTIN_Number,prefs.events[preset].year,TAG_END);
  344.                 GT_RefreshWindow(Project0Wnd3,NULL);
  345.                 break;
  346.             }
  347.             prefs.events[preset].year=si->LongInt;
  348.             GT_SetGadgetAttrs(Project0Gadgets3[GD_Year_Slide],Project0Wnd3,NULL,GTSL_Level,si->LongInt,TAG_END);
  349.             GT_RefreshWindow(Project0Wnd3,NULL);
  350.             checkcheck();
  351.         break;
  352.         case GD_Date_Slide:
  353.             prefs.events[preset].day=code;
  354.             GT_SetGadgetAttrs(Project0Gadgets3[GD_Date_Value],Project0Wnd3,NULL,GTIN_Number,code,TAG_END);
  355.             GT_RefreshWindow(Project0Wnd3,NULL);
  356.             checkcheck();
  357.         break;
  358.         case GD_Month_Slide:
  359.             prefs.events[preset].month=code;
  360.             GT_SetGadgetAttrs(Project0Gadgets3[GD_Month_Value],Project0Wnd3,NULL,GTIN_Number,code,TAG_END);
  361.             GT_RefreshWindow(Project0Wnd3,NULL);
  362.             checkcheck();
  363.         break;
  364.         case GD_Year_Slide:
  365.             prefs.events[preset].year=code;
  366.             GT_SetGadgetAttrs(Project0Gadgets3[GD_Year_Value],Project0Wnd3,NULL,GTIN_Number,code,TAG_END);
  367.             GT_RefreshWindow(Project0Wnd3,NULL);
  368.             checkcheck();
  369.         break;
  370.         case GD_OK:
  371.             return(1);
  372.         break;
  373.         case GD_Current:
  374.             prefs.events[preset].enabledate=code;
  375.         break;
  376.         case GD_Freq:
  377.             prefs.events[preset].freq=code;    
  378.         break;
  379.         /* String = GD_Date_Text */
  380.     }
  381.     GT_SetGadgetAttrs(Project0Gadgets3[GD_Date_Text],Project0Wnd3,NULL,GTTX_Text,dodate(),TAG_END);
  382.     GT_RefreshWindow(Project0Wnd3,NULL);
  383.  
  384.     return(0);
  385.     
  386. }
  387.  
  388. void checkcheck(void) {
  389.  
  390.     if(!prefs.events[preset].enabledate) {
  391.         GT_SetGadgetAttrs(Project0Gadgets3[GD_Current],Project0Wnd3,NULL,GTCB_Checked,TRUE,TAG_END);
  392.         GT_RefreshWindow(Project0Wnd3,NULL);        
  393.         prefs.events[preset].enabledate=TRUE;
  394.     }
  395.  
  396. }
  397.  
  398. char *dodate(void) {
  399.     char tmp[10];
  400.     int offx, offy;
  401.  
  402.     offx=Project0Wnd3->BorderLeft;
  403.     offy=Project0Wnd3->BorderTop;
  404.  
  405.     strcpy(datey,findday(preset));
  406.     strcat(datey," ");
  407.  
  408.     sprintf(tmp,"%ld",prefs.events[preset].day);
  409.     strcat(datey,tmp);
  410.     strcat(datey," ");
  411.  
  412.     switch(language) {
  413.         case ENGLISH:
  414.             strcat(datey,months_data[prefs.events[preset].month]);
  415.         break;
  416.         case FRENCH:
  417.             strcat(datey,months_data_french[prefs.events[preset].month]);
  418.         break;
  419.         case SPANISH:
  420.             strcat(datey,months_data_spanish[prefs.events[preset].month]);
  421.         break;
  422.     }
  423.     strcat(datey,", ");
  424.  
  425.     sprintf(tmp,"%ld",prefs.events[preset].year);
  426.     strcat(datey,tmp);
  427.  
  428.     return(datey);    
  429. }
  430.  
  431. char *findday(int preset2) {
  432.  
  433.     ULONG secs;
  434.  
  435.     dte=AllocMem(sizeof(struct ClockData),MEMF_PUBLIC|MEMF_CLEAR);
  436.  
  437.     dte->mday=prefs.events[preset2].day;
  438.     dte->month=prefs.events[preset2].month;
  439.     dte->year=prefs.events[preset2].year;
  440.     dte->sec=0;
  441.     dte->min=0;
  442.     dte->hour=0;
  443.  
  444.     secs=Date2Amiga(dte);
  445.     Amiga2Date(secs,&ndte);
  446.  
  447.     FreeMem(dte,sizeof(struct ClockData));
  448.  
  449.     switch(language) {
  450.         case ENGLISH:
  451.             return(days_data[ndte.wday]);
  452.         break;
  453.         case FRENCH:
  454.             return(days_data_french[ndte.wday]);
  455.         break;
  456.         case SPANISH:
  457.             return(days_data_spanish[ndte.wday]);
  458.         break;
  459.     }
  460. }
  461.  
  462. void adaptlang(void) {
  463.     switch(language) {
  464.         case ENGLISH:
  465.         break;
  466.         case FRENCH:
  467.             Freq0Labels[0]="Journalier";
  468.             Freq0Labels[1]="Une seule fois";
  469.             Freq0Labels[2]="De la semaine";
  470.             Freq0Labels[3]="Mensuel";
  471.             Freq0Labels[4]="Annuellement";
  472.             Project0NGad3[0].ng_GadgetText="Jour";
  473.             Project0NGad3[1].ng_GadgetText="Mois";
  474.             Project0NGad3[2].ng_GadgetText="Année";
  475.             Project0NGad3[6].ng_GadgetText="Emploi";
  476.             Project0NGad3[7].ng_GadgetText="Emploi date?";
  477.         break;
  478.         case SPANISH:
  479.             Freq0Labels[0]="Diario";
  480.             Freq0Labels[1]="Una vez";
  481.             Freq0Labels[2]="Semanalmente";
  482.             Freq0Labels[3]="Mensualmente";
  483.             Freq0Labels[4]="Anualmente";
  484.             Project0NGad3[0].ng_GadgetText="Dia";
  485.             Project0NGad3[1].ng_GadgetText="Mes";
  486.             Project0NGad3[2].ng_GadgetText="Año";
  487.             Project0NGad3[6].ng_GadgetText="Usar";
  488.             Project0NGad3[7].ng_GadgetText="Usar fecha ?";
  489.         break;
  490.         default:
  491.         break;
  492.     }
  493. }
  494.  
  495.  
  496.